---
title: ウィンドウ枠の固定（Freeze）
---

<Callout type="warning">
  固定は現在の選択範囲の左上セルを基準点として行われます。したがって、選択セルが A1 の場合、固定は実質的に効果を持ちません。
</Callout>

[`IWorksheetData.freeze`](/guides/sheets/model/workbook-data) を利用してワークシートの固定状態を設定できます。インターフェース定義は以下のとおりです:

```typescript
interface IFreeze {
  /**
   * 固定する列数
   */
  xSplit: number
  /**
   * 固定する行数
   */
  ySplit: number
  /**
   * スクロール可能領域（メイン表示エリア）の開始行インデックス
   */
  startRow: number
  /**
   * スクロール可能領域（メイン表示エリア）の開始列インデックス
   */
  startColumn: number
}
```

例えば、列 B と行 2 を固定したい場合は次のように設定します：

```json
{
  "xSplit": 1, // 1 列固定 → 列 B が固定
  "ySplit": 1, // 1 行固定 → 行 2 が固定
  "startRow": 2, // スクロール開始行は 3 行目
  "startColumn": 2 // スクロール開始列は C 列
}
```

最初の 1 行と 1 列のみを固定するなど、カスタム固定機能を実装したい場合は以下を参照してください:

- [カスタムメニュー](/guides/recipes/tutorials/custom-plugin)
- [SetFrozenCommand](https://github.com/dream-num/univer/blob/dev/packages/sheets/src/commands/commands/set-frozen.command.ts#L32)

## Facade API

`FWorksheet` クラスは行および列の固定状態を管理するための複数のメソッドを提供します。これらにより、固定の設定、取得、解除が可能です。

### 固定を設定（Set Freeze）

```typescript
const worksheet = univerAPI.getActiveWorkbook().getActiveSheet()
worksheet.setFreeze({
  xSplit: 1, // 1 列固定（列 B）
  ySplit: 1, // 1 行固定（行 2）
  startRow: 2, // スクロール開始行は 3 行目
  startColumn: 2, // スクロール開始列は C 列
})
console.log('The current freeze state:', worksheet.getFreeze())
```

### 固定列数を設定（Set Frozen Columns）

```typescript
const worksheet = univerAPI.getActiveWorkbook().getActiveSheet()

// 列 A～B を固定
worksheet.setFrozenColumns(2)
```

### 固定行数を設定（Set Frozen Rows）

```typescript
const worksheet = univerAPI.getActiveWorkbook().getActiveSheet()

// 先頭 3 行を固定
worksheet.setFrozenRows(3)
```

### 固定状態を取得（Get Freeze State）

```typescript
const worksheet = univerAPI.getActiveWorkbook().getActiveSheet()

const freezeState = worksheet.getFreeze()
```

### 固定列数を取得（Get Frozen Columns）

```typescript
const worksheet = univerAPI.getActiveWorkbook().getActiveSheet()

const frozenColumns = worksheet.getFrozenColumns()
```

### 固定行数を取得（Get Frozen Rows）

```typescript
const worksheet = univerAPI.getActiveWorkbook().getActiveSheet()

const frozenRows = worksheet.getFrozenRows()
```

### 固定を解除（Cancel Freeze）

```typescript
const worksheet = univerAPI.getActiveWorkbook().getActiveSheet()

// すべての固定を解除
worksheet.cancelFreeze()
```
